package com.xiaotao.entity;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;

/**
 * 阿里云身份证OCR识别结果实体类（完全匹配返回格式）
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class CardVerify {
    // -------------------------- 公共字段（正反面均有）--------------------------
    private String config_str;    // 配置信息（如{"side":"face"}）
    private Boolean is_fake;      // 是否是复印件
    private Boolean success;      // 识别结果：true=成功，false=失败
    private Warning warning;      // 质量分结果（仅当请求时quality_info=true才返回）

    // -------------------------- 正面独有字段 --------------------------
    private String address;       // 地址（仅正面返回）
    private FaceRect face_rect;   // 人脸位置（仅正面返回）
    private List<Point> card_region; // 身份证区域位置（四个顶点，仅正面返回）
    private List<Point> face_rect_vertices; // 人脸位置（四个顶点，仅正面返回）
    private String name;          // 姓名（仅正面返回）
    private String nationality;   // 民族（仅正面返回，注意字段名是nationality）
    private String num;           // 身份证号（仅正面返回，注意字段名是num）
    private String sex;           // 性别（仅正面返回）
    private String birth;         // 出生日期（仅正面返回，格式如20000101）

    // -------------------------- 反面独有字段 --------------------------
    private String start_date;    // 有效期起始时间（仅反面返回，格式如19700101）
    private String end_date;      // 有效期结束时间（仅反面返回，格式如19800101）
    private String issue;         // 签发机关（仅反面返回）

    // -------------------------- 嵌套子实体类 --------------------------
    /** 人脸位置信息 */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class FaceRect {
        private Integer angle;     // 矩形顺时针旋转度数
        private Center center;     // 人脸矩形中心坐标
        private Size size;         // 人脸矩形长宽
    }

    /** 坐标中心 */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Center {
        private Double x;          // X轴坐标
        private Double y;          // Y轴坐标
    }

    /** 尺寸（长宽） */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Size {
        private Double height;     // 高度
        private Double width;      // 宽度
    }

    /** 顶点坐标（用于card_region和face_rect_vertices） */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Point {
        private Integer x;         // X轴坐标
        private Integer y;         // Y轴坐标
    }

    /** 质量分结果（仅当quality_info=true时返回） */
    @Data
    @AllArgsConstructor
    @NoArgsConstructor
    public static class Warning {
        private Double completeness_score; // 完整度评分
        private Integer is_copy;           // 是否是复印件（1=是，0=否）
        private Integer is_reshoot;        // 是否是翻拍（1=是，0=否）
        private Double quality_score;      // 整体质量分数
        private Double tamper_score;       // 篡改分数（越大篡改可能性越高）
    }
}